package fr.poy.mygluco.client;

import java.io.Serializable;
import java.util.List;

import com.google.gwt.gears.client.Factory;
import com.google.gwt.gears.client.database.Database;
import com.google.gwt.gears.client.database.DatabaseException;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;

import fr.poy.mygluco.model.Record;
  

@SuppressWarnings("serial")
public class ServiceLocal implements Serializable{
  
	private Database db;  
	private final static String[] CREATES = {
		 "CREATE TABLE IF NOT EXISTS ref_type (id INTEGER PRIMARY KEY AUTOINCREMENT, description VARCHAR(255), comment VARCHAR(255), active BOOLEAN DEFAULT 'true', readonly BOOLEAN DEFAULT 'false')"
		,"CREATE TABLE IF NOT EXISTS ref      (id INTEGER PRIMARY KEY AUTOINCREMENT, ref_type INTEGER REFERENCES ref_type(id), name VARCHAR(255), description VARCHAR(255), active BOOLEAN DEFAULT 'true', UNIQUE (name, ref_type))"
		,"CREATE TABLE IF NOT EXISTS record   (id INTEGER PRIMARY KEY AUTOINCREMENT, record_date DATETIME,record_type INTEGER,record_value INTEGER, comment VARCHAR(255), active BOOLEAN )"
		
		//heure et periode journée - journée et plages horaires - jours de travail
		//patient /profile
		//unités, types d'insuline 
		//objectifs glycémie et labo
		//labo resultat + labo result meta  ou dossier medicaux
		//analyse + file
		
	};
	
	public ServiceLocal() {
	    try {
	      db = Factory.getInstance().createDatabase();
	      db.open("glucolog");
	      for (String s : CREATES) {
	    	  db.execute(s);
		  }
	    } catch (DatabaseException e) {
	      RootPanel.get().add(new HTML("Error opening or creating database: <font color=\"red\">" + e.toString() + "</font>"));
	      return;
	    }
	}
	
//	public void persistRefType(RefType r){
//		
//	}
//	public void removeRefType(int id){
//		
//	}
//	public List<RefType> listRefType(){
//		List<RefType> ret = new ArrayList<RefType>();
//		try {
//			ResultSet rs = db.execute("SELECT * FROM ref_type ORDER BY id DESC");  
//			for ( ; rs.isValidRow(); rs.next()) { 
//				ret.add(new RefType(
//						rs.getFieldAsInt(0)
//						, rs.getFieldAsString(1)
//						, rs.getFieldAsString(2)
//						, Boolean.valueOf(rs.getFieldAsString(3))
//						, Boolean.valueOf(rs.getFieldAsString(4))));
//			}
//			 
//			rs.close();
//		} catch (DatabaseException e) {
//			Window.alert(e.toString());
//		}
//		return null;
//	}
//	
//
//	public void persistRecord(Record r){
//		
//	}
//	public void removeRecord(int id){
//		
//	}
//	public List<Record> listRecord( ){ 
//		return null;
//	}
	
	
	//
//  /**
//   * Remove all phrases from the database.
//   */
//  private void clearPhrases() {
//    try {
//      db.execute("DELETE FROM Phrases");
//    } catch (DatabaseException e) {
//      Window.alert(e.toString());
//    }
//  }
//
//  /**
//   * Fill the labels with the phrases from the database.
//   */
//  private void displayRecentPhrases() {
//    try {
//      ResultSet rs = db.execute("SELECT * FROM Phrases ORDER BY Id DESC");
//      int i;
//
//      for (i = 1; rs.isValidRow(); ++i, rs.next()) {
//        if (i <= NUM_SAVED_ROWS) {
//        	
//          dataTable.setText(i, 0, rs.getFieldAsString(0));
//          dataTable.setText(i, 1, rs.getFieldAsString(1));
//          dataTable.setText(i, 2, new Date(rs.getFieldAsLong(2)).toString());
//        } else {
//          db.execute("DELETE FROM Phrases WHERE Id = ?",
//              new String[] {rs.getFieldAsString(0)});
//        }
//      }
//      // If a phrase has been removed, clear the label.
//      for (; i <= NUM_SAVED_ROWS; i++) {
//        for (int j = 0; j < NUM_DATA_TABLE_COLUMNS; j++) {
//          dataTable.clearCell(i, j);  
//        }
//      }
//      rs.close();
//    } catch (DatabaseException e) {
//      Window.alert(e.toString());
//    }
//  }
//
//  /**
//   * Add a new phrase to the database.
//   */
//  private void insertPhrase() {
//    try {
//      String phrase = input.getText();
//      if (phrase.length() > 0) {
//        db.execute("INSERT INTO Phrases (Phrase, Timestamp) VALUES (?, ?)",
//            new String[] {phrase, Long.toString(System.currentTimeMillis())});
//        displayRecentPhrases();
//        input.setText("");
//      }
//    } catch (DatabaseException e) {
//      Window.alert(e.toString());
//    }
//  }
}
